#ifndef SOFT_MIN_CUSTOM_TILING_H
#define SOFT_MIN_CUSTOM_TILING_H
#include "register/tilingdata_base.h"

namespace optiling {

// 数据类型标志位定义
enum DataTypeFlag {
    DT_UINT8  = 0,   // uint8类型
    DT_INT16  = 1,   // int16类型
    DT_INT32  = 2,   // int32类型
    DT_FLOAT16 = 3,  // half类型
    DT_FLOAT  = 4    // float类型
};

// SoftMin计算模式定义
enum SoftMinMode {
    MODE_ROW = 1,     // 行处理模式（沿列维度计算softmin）
    MODE_COLUMN = 2,  // 列处理模式（沿行维度计算softmin）
};

BEGIN_TILING_DATA_DEF(SoftMinCustomTilingData)
  // 基础形状参数
  TILING_DATA_FIELD_DEF(int32_t, batchSize);      // 批量大小
  TILING_DATA_FIELD_DEF(int32_t, rows);           // 序列长度(行数)
  TILING_DATA_FIELD_DEF(int32_t, cols);           // 特征维度(列数)
  TILING_DATA_FIELD_DEF(int32_t, computeSize);    // 每次softmin计算的向量长度
  TILING_DATA_FIELD_DEF(int32_t, vectorNum);      // 需要计算的向量数量
  TILING_DATA_FIELD_DEF(int32_t, dim);            // 计算维度 (1: 按行, 0: 按列)
  
  // 核间划分参数
  TILING_DATA_FIELD_DEF(int32_t, total_vectors);           // 总向量数
  TILING_DATA_FIELD_DEF(int32_t, base_vectors_per_core);   // 每个核基础分配的向量数
  TILING_DATA_FIELD_DEF(int32_t, big_core_num);            // 需要多分配一个向量的核数量
  TILING_DATA_FIELD_DEF_ARR(int32_t, 8, core_vector_start);    // 每个核处理向量的起始索引
  TILING_DATA_FIELD_DEF_ARR(int32_t, 8, core_vector_end);      // 每个核处理向量的结束索引
  TILING_DATA_FIELD_DEF_ARR(int32_t, 8, core_vector_count);    // 每个核处理的向量数量
  
  // 核内分块参数 - 向量维度
  TILING_DATA_FIELD_DEF(int32_t, tile_vector_num);             // 每次处理的向量数量
  TILING_DATA_FIELD_DEF_ARR(int32_t, 8, core_loop_times);   // 每个核在向量维度的循环次数
  TILING_DATA_FIELD_DEF_ARR(int32_t, 8, core_tail_vector);         // 每个核在向量维度的尾部处理数量
  
  // 核内分块参数 - 计算维度
  TILING_DATA_FIELD_DEF(int32_t, tile_compute_size);           // 每次处理的向量长度
  TILING_DATA_FIELD_DEF(int32_t, loop_times_compute);          // 在计算维度的循环次数
  TILING_DATA_FIELD_DEF(int32_t, tail_compute);                // 计算维度的尾部处理长度
  
  // 内存对齐参数
  TILING_DATA_FIELD_DEF(int32_t, aligned_compute_size);        // 对齐后的计算大小
  
  // 可选的调试和性能参数
  TILING_DATA_FIELD_DEF(int32_t, alignSize);          // 对齐大小（字节）
  TILING_DATA_FIELD_DEF(int32_t, ubUsage);            // UB使用量估算
  TILING_DATA_FIELD_DEF(int32_t, bufferNum);          // 缓冲区数量
  
END_TILING_DATA_DEF;

REGISTER_TILING_DATA_CLASS(SoftMinCustom, SoftMinCustomTilingData)
}
#endif // SOFT_MIN_CUSTOM_TILING_H